ssl证书是必不可少的, 腾讯云申请证书麻烦, 不能使用泛域名, 也不能自动续签, 而acme.sh脚本则能解决这些问题.

大家普遍使用两种方法来安装, 一种是直接在主机上安装, 另一种是使用acme的docker安装, 我发现这两种方法都不好, 于是自创了一种nginx镜像里面集成acme脚本, 我觉得这种方法好.

我使用的是腾讯云, 所以下面贴上配置, 然后慢慢解释下:

Nginx的Docker配置

FROM nginx:1.21.1

#设置本地时区
ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone

#统一主机和容器管理者
RUN groupmod -g <GID> www-data \
    && usermod -u <GID> -g <GID> www-data

# 安装crontab等软件
RUN echo "Acquire::http::Proxy \"<代理>\";" > /etc/apt/apt.conf \
&& apt-get update \
&& apt-get install -y cron openssl socat procps \
&& rm -rf /var/lib/apt/lists/*

# 设置代理并下载acme脚本 然后设置自动更新
RUN export http_proxy="<代理>" \
&& export https_proxy="<代理>" \
&& curl https://get.acme.sh | sh 

#################

# 注册帐号
RUN ~/.acme.sh/acme.sh --register-account -m <邮箱帐号>

# 设置DNSPod帐号密码,使用DNS验证生成证书
RUN export DP_Id="<DP_Id>" \
&& export DP_Key="<DP_Key>" \
&& ~/.acme.sh/acme.sh --issue \
--dns dns_dp \
-d dzketang.com \
-d '*.dzketang.com' \
-d dunfu.top \
-d '*.dunfu.top'


# 刷新
ENV REFRESH_TIME 20230424

# 添加安装证书脚本
ADD ./docker/nginx/reload.sh /root/reload.sh 

# 创建证书文件夹并安装证书
RUN mkdir -p /var/www/certificate \
&& chmod +x /root/reload.sh \
&& ~/.acme.sh/acme.sh --install-cert -d dzketang.com \
--key-file        /var/www/certificate/certificate.key \
--fullchain-file  /var/www/certificate/certificate.crt \
--reloadcmd  /root/reload.sh

# 设置acme脚本自动更新
RUN ~/.acme.sh/acme.sh --upgrade --auto-upgrade

Nginx的Docker配置解释

  1. 如果是国内服务器必须要使用代理, 否则根本安装不了.

  2. issue多域名泛域名生成的证书只有一张(这个是重点), 以上4个域名是共用一张证书的, acme作者说了, --install-cert命令只会记录最后一个, 如果不是共用一张证书, 就要多次执行--install-cert命令, 脚本只会记录最后一个--install-cert命令, 那么根本不能实现自动续签, 所以四个域名共用一张证书很合理.

  3. 共用的证书会生成到第一个issue的域名下, 所以我在执行--install-cert时, -d后面的参数是第一个域名.

2023-04-25-10-15-13

2023-04-25-10-15-30

  1. 我没有创建acme.sh别名, 所以每次执行命令时要使用全路径~/.acme.sh/acme.sh

  2. 使用issue生成证书时, 会出现curl的错误, 我估计是curl原装版本太低, curl的证书不支持, 解决方法应该是安装curl的高版本, 或则curl使用时禁用检查. 暂时看上去没什么影响就没管, 知道的兄弟说一下如何解决.

2023-04-25-10-17-59

  1. 必须使用脚本重启, 在nginx没启动时使用启动命令, 在nginx启动后使用重载命令.

  2. 使用泛域名前必须要先使用主域名, 不能直接使用泛域名.

2023-04-25-10-24-48

  1. 泛域名验证必须使用DNS验证

  2. 申请 DNSPod Token地址

reload脚本

#! /bin/bash

nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`
 
if [ $nginx_procnum -eq 0 ]
then
    echo "start nginx..."
    /etc/init.d/nginx start
else 
    echo "reload nginx"
  nginx -s reload
fi

参考资料

docker-compose + acme.sh + nginx 签署 ssl 证书

acmesh-official/acme.sh

Curl 设置代理,看这篇就够了

零依赖!使用acme.sh设置nginx多个https证书自动更新,无限续期https证书

使用Let’s encrypt免费SSL证书(好文)

使用 acme.sh 配置自动续签 SSL 证书

THE END
推荐文章
  • 在服务器上的docker版本mysql新建数据库并给指定用户

  • 在Linux中利用git和crontab自动备份数据库

  • 微信开店全攻略

  • 黄帝内经-第十篇-五脏生成篇(1)

  • 黄帝内经-第32篇-刺热篇(2)

  • python如何安装包管理器pip

  • 黄帝内经-第42篇-风论篇(2)

  • jQuery Object 和 HTML Element间的转换

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字